package domain;

import java.io.Serializable;
import javax.persistence.*;

import java.util.Date;
import java.util.Set;


/**
 * The persistent class for the persoon database table.
 * 
 */
@Entity
@Table(name="persoon")
@NamedQueries({
    @NamedQuery(name = "Persoon.findByPersoonId", query = "SELECT p FROM Persoon p WHERE p.persoonId = :persoon_id"),
    @NamedQuery(name = "Persoon.findByType", query = "SELECT p FROM Persoon p WHERE p.type = :type ORDER BY p.voornaam, p.achternaam"),
    @NamedQuery(name = "Persoon.findByName", query = "SELECT p FROM Persoon p WHERE p.type = :type AND (p.voornaam LIKE :naam OR p.achternaam LIKE :naam) ORDER BY p.voornaam, p.achternaam")})
public class Persoon implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="persoon_id", unique=true, nullable=false)
	private int persoonId;

	@Column(nullable=false, length=50)
	private String achternaam;

	@Column(nullable=false, length=50)
	private String adres;

	@Column(nullable=false, length=9)
	private String bankaccount;

	@Column(nullable=false, length=100)
	private String email;

    @Temporal( TemporalType.DATE)
	@Column(nullable=false)
	private Date geboortedatum;

	@Column(nullable=false, length=1)
	private String geslacht;

	@Column(nullable=false, length=6)
	private String postcode;

	@Column(nullable=false, length=3)
	private String taal;

	@Column(nullable=false, length=1)
	private String type;

	@Column(nullable=false, length=20)
	private String voornaam;

	@Column(nullable=false, length=50)
	private String woonplaats;

	//bi-directional many-to-one association to Deelnemer
	@OneToMany(mappedBy="persoon", fetch=FetchType.EAGER)
	private Set<Deelnemer> deelnemers;

	//bi-directional many-to-one association to Planning
	@OneToMany(mappedBy="gids", fetch=FetchType.EAGER)
	private Set<Planning> is_gids_van_reizen;

    public Persoon() {
    }

	public int getPersoonId() {
		return this.persoonId;
	}

	public void setPersoonId(int persoonId) {
		this.persoonId = persoonId;
	}

	public String getAchternaam() {
		return this.achternaam;
	}

	public void setAchternaam(String achternaam) {
		this.achternaam = achternaam;
	}

	public String getAdres() {
		return this.adres;
	}

	public void setAdres(String adres) {
		this.adres = adres;
	}

	public String getBankaccount() {
		return this.bankaccount;
	}

	public void setBankaccount(String bankaccount) {
		this.bankaccount = bankaccount;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getGeboortedatum() {
		return this.geboortedatum;
	}

	public void setGeboortedatum(Date geboortedatum) {
		this.geboortedatum = geboortedatum;
	}

	public String getGeslacht() {
		return this.geslacht;
	}

	public void setGeslacht(String geslacht) {
		this.geslacht = geslacht;
	}

	public String getPostcode() {
		return this.postcode;
	}

	public void setPostcode(String postcode) {
		this.postcode = postcode;
	}

	public String getTaal() {
		return this.taal;
	}

	public void setTaal(String taal) {
		this.taal = taal;
	}

	public String getType() {
		return this.type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getVoornaam() {
		return this.voornaam;
	}

	public void setVoornaam(String voornaam) {
		this.voornaam = voornaam;
	}

	public String getWoonplaats() {
		return this.woonplaats;
	}

	public void setWoonplaats(String woonplaats) {
		this.woonplaats = woonplaats;
	}

	public Set<Deelnemer> getDeelnemers() {
		return this.deelnemers;
	}

	public void setDeelnemers(Set<Deelnemer> deelnemers) {
		this.deelnemers = deelnemers;
	}
	
	public Set<Planning> getIs_gids_van_reizen() {
		return this.is_gids_van_reizen;
	}

	public void setIs_gids_van_reizen(Set<Planning> is_gids_van_reizen) {
		this.is_gids_van_reizen = is_gids_van_reizen;
	}

	@Override
	public boolean equals(Object obj) {
		return (obj!=null && obj instanceof Persoon && ((Persoon)obj).getPersoonId()==getPersoonId());
	}

	@Override
	public String toString() {
		return getVoornaam() + " " + getAchternaam();
	}
}